上一篇文章介紹少使用者發出請求的手段之一 query string,但是query string有長度限制,而且容易被攔截無隱私可言,所以本篇要介紹使用者發出請求的手段之二,form POST。
本文同步放置於此
本篇介紹iris的 form POST,當然要先由什麼是form POST講起,再來才帶到關於iris的form POST怎麼處理,所以我們先由介紹form POST開始。
有興趣的讀者們可以先看看POST Http Wiki,這裡可以分成兩部分來說明,第一個是POST
方法,另一個是form POST
,這篇主要是說明form POST
,所以我們針對form POST
來說明,簡單說明這主題就是提交一個表單,所以接下來我們針對iris如何處理form POST
。
這裡我們使用docs-iris-go的例子來說明,請大家看看以下內容,首先是html
的部分。
<form action="/" method="POST">
<p>Check one or more colors</p>
<label for="red">Red</label>
<!-- name can be "colors" too -->
<input type="checkbox" name="colors[]" value="red" id="red">
<label for="green">Green</label>
<input type="checkbox" name="colors[]" value="green" id="green">
<label for="blue">Blue</label>
<input type="checkbox" name="colors[]" value="blue" id="blue">
<input type="submit">
</form>
上面是一個簡單的html
的表單,當按下submit
後送出表單,接下來看看下列例子來學習如何處理form POST
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.RegisterView(iris.HTML("./templates", ".html"))
app.Get("/", showForm)
app.Post("/", handleForm)
app.Listen(":8080")
}
func showForm(ctx iris.Context) {
ctx.View("form.html")
}
type formExample struct {
Colors []string `form:"colors[]"` // or just "colors".
}
func handleForm(ctx iris.Context) {
var form formExample
err := ctx.ReadForm(&form)
if err != nil {
ctx.StopWithError(iris.StatusBadRequest, err)
return
}
ctx.JSON(iris.Map{"Colors": form.Colors})
}
中這個例子做了兩件事,其中之一是之前提過的綁定view
,這裡綁定的內容就是前面的html
的例子,另外一件事就是當收到使用者提交的表單要如何處理。
這裡的處理方式就是定義一個model然後呼叫ReadForm
的方法來將提交的表單綁定成我們指定的model,如此我們就可以針對model來操作。
本篇文章介紹了如何在iris內使用model binding的方式來處理form POST,除了表單外form POST還可以傳遞檔案,待下一篇再跟大家介紹該如何處理。